/*
 * 
 */
package fr.univtln.superplanning.controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import fr.univtln.superplanning.api.ISuperplanningManager;
import fr.univtln.superplanning.api.actor.IPerson;
import fr.univtln.superplanning.api.actor.PersonType;
import fr.univtln.superplanning.api.actor.Teacher;
import fr.univtln.superplanning.gui.MainWindow;

/**
 * this controller manage the person manager view.
 * 
 * @author vincent
 * 
 */
public class PersonManagerController implements ActionListener, ListSelectionListener {

	/** The db login view. */
	private MainWindow mainWindow; // view

	/** The superplanning manager. */
	private ISuperplanningManager superplanningManager;

	/**
	 * Instantiates a new dB login controller.
	 * 
	 * @param superplanningManager
	 *            the superplanning manager
	 */
	public PersonManagerController(ISuperplanningManager superplanningManager, MainWindow mainWindow) {
		this.mainWindow = mainWindow;
		this.superplanningManager = superplanningManager;
		// TO-DO Inserer une fonction qui appelle les controllers
	}

	public MainWindow getMainWindow() {
		return mainWindow;
	}

	public void setMainWindow(MainWindow mainWindow) {
		this.mainWindow = mainWindow;
	}

	public ISuperplanningManager getSuperplanningManager() {
		return superplanningManager;
	}

	public void setSuperplanningManager(ISuperplanningManager superplanningManager) {
		this.superplanningManager = superplanningManager;
	}

	/**
	 * This method initialize the UI with the default filter values
	 */
	public void updateUi() {
		mainWindow.getPersonPanelListpersonPanelList().setModel(new DefaultListModel());
		mainWindow.getPersonPanelModifyPanelChoiceComboBox().removeAllItems();
		mainWindow.getPersonPanelListpersonPanelFilterComboBox().removeAllItems();

		List<String> logins = superplanningManager.getPersonManager().getAllPersonLogins();
		List<String> filters = superplanningManager.getPersonManager().getAllPersonType();

		if (logins != null) {
		}
		mainWindow.getPersonPanelListpersonPanelList().setListData(logins.toArray());

		for (String s : filters) {
			mainWindow.getPersonPanelListpersonPanelFilterComboBox().addItem(s);
			mainWindow.getPersonPanelModifyPanelChoiceComboBox().addItem(s);
		}

		mainWindow.getPersonPanelModifyPanelNewButton().addActionListener(this);
		mainWindow.getPersonPanelModifyPanelAddButton().addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		// TODO Auto-generated method stub
		/*
		 * Partie création d'un nouvel user
		 */
		if (evt.getSource() == mainWindow.getPersonPanelModifyPanelNewButton()) {
			/*
			 * Remise à zéro des champs pour pouvoir insérer une nouvelle
			 * personne
			 */
			try {
				mainWindow.getPersonPanelModifyPanelFirstnameTextFiled().setText("");
				mainWindow.getPersonPanelModifyPanelLastnameTextFiled().setText("");
				mainWindow.getPersonPanelModifyPanelMailTextFiled().setText("");
				mainWindow.getPersonPanelModifyPanelLoginTextFiled().setText("");
				mainWindow.getPersonPanelModifyPanelPassTextFiled().setText("");
				mainWindow.getPersonPanelModifyPanelLevelSlider().setValue(0);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		/*
		 * Partie ajout d'un utilisateur
		 */
		else if (evt.getSource() == mainWindow.getPersonPanelModifyPanelAddButton()) {
			try {
				/*
				 * Récupération des champs pour l'ajout
				 */

				IPerson person = new Teacher();
				String fn = mainWindow.getPersonPanelModifyPanelFirstnameTextFiled().getText();
				person.setFirstName(mainWindow.getPersonPanelModifyPanelFirstnameTextFiled()
						.getText());
				person.setLastName(mainWindow.getPersonPanelModifyPanelLastnameTextFiled()
						.getText());
				person.setEmail(mainWindow.getPersonPanelModifyPanelMailTextFiled().getText());
				person.setLogin(mainWindow.getPersonPanelModifyPanelLoginTextFiled().getText());
				person.setPassword(mainWindow.getPersonPanelModifyPanelPassTextFiled().getText());

				/*
				 * Récupération du type sélectionné pour récuperer le code
				 */
				String person_Type = (String) mainWindow.getPersonPanelModifyPanelChoiceComboBox()
						.getSelectedItem();
				PersonType personType = superplanningManager.getPersonManager()
						.getPersonCodeByType(person_Type);
				person.setPersonType(personType);

				int levelacces = mainWindow.getPersonPanelModifyPanelLevelSlider().getValue();
				person.setRightsAccessLevel(levelacces);

				/*
				 * Insertion des champs dans la base de donnée
				 */
				superplanningManager.getPersonManager().insertPerson(person);
				/*
				 * update view
				 */
				updateUi();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	}

	@Override
	public void valueChanged(ListSelectionEvent e) {
		// TODO Auto-generated method stub
		if (e.getSource() == mainWindow.getPersonPanelListpersonPanelList()) {
			String personWanted = (String) mainWindow
					.getPersonPanelListpersonPanelList()
					.getModel()
					.getElementAt(mainWindow.getPersonPanelListpersonPanelList().getSelectedIndex());
			System.out.println(personWanted);

			IPerson recupPerson = superplanningManager.getPersonManager().getPersonByLogin(
					personWanted);
			System.out.println(recupPerson);

			/*
			 * Déclaration des variables contenant les données d'un utilisateur
			 */
			String firstname = recupPerson.getFirstName();
			String lastname = recupPerson.getLastName();
			String mail = recupPerson.getEmail();
			String login = recupPerson.getLogin();
			String pass = recupPerson.getPassword();
			int levelAdmin = recupPerson.getRightsAccessLevel();
			System.out.println("=================================>>>>>>>>>>>>>" + levelAdmin);

			/*
			 * Mise à jour de la vue lors de la selection d'un utilisateur dans
			 * la liste
			 */
			mainWindow.getPersonPanelModifyPanelFirstnameTextFiled().setText(firstname);
			mainWindow.getPersonPanelModifyPanelLastnameTextFiled().setText(lastname);
			mainWindow.getPersonPanelModifyPanelMailTextFiled().setText(mail);
			mainWindow.getPersonPanelModifyPanelLoginTextFiled().setText(login);
			mainWindow.getPersonPanelModifyPanelPassTextFiled().setText(pass);
			mainWindow.getPersonPanelModifyPanelLevelSlider().setValue(levelAdmin);

		}

	}

}
